#!/usr/bin/env python
# -*- coding: utf-8 -*- 

#    pyogpo - ogpo calculator for 2009 year
#    Copyright (C) 2009 resurtm
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

from PyQt4 import QtCore, QtGui
import math
from aboutwindow import *
from licensewindow import *

class MainWindow(QtGui.QMainWindow):
	MRP = 1296.0
	regionItems = [ 'выбрать', 'алматинская', 'южно-казахстанская', 'восточно-казахстанская', 'костанайская', 'карагандинская', 'северо-казахстанская', 'акмолинская', 'павлодарская', 'жамбылская', 'актюбинская', 'западно-казахстанская', 'кызылординская', 'атырауская', 'мангистауская', ]
	cityItems = [
		# dummy
		[ 'выберите область', ],
		# алматинская
		[ 'выбрать', 'Талдыкорган', 'Капчагай', 'Текели', 'Алматы', 'другой', ],
		# южно-казахстанская
		[ 'выбрать', 'Шымкент', 'Арысь', 'Кентау', 'Туркестан', 'другой', ],
		# восточно-казахстанская
		[ 'выбрать', 'Усть-Каменогорск', 'Аягоз', 'Зыряновск', 'Курчатов', 'Риддер', 'Семей', 'другой', ],
		# костанайская
		[ 'выбрать', 'Костанай', 'Аркалык', 'Лисаковск', 'Рудный', 'другой', ],
		# карагандинская
		[ 'выбрать', 'Караганда', 'Балхаш', 'Жезказган', 'Каражал', 'Приозёрск', 'Сарань', 'Сатпаев', 'Темиртау', 'другой', ],
		# северо-казахстанская
		[ 'выбрать', 'Петропавловск', 'другой', ],
		# акмолинская
		[ 'выбрать', 'Кокшетау', 'Степногорск', 'Астана', 'другой', ],
		# павлодарская
		[ 'выбрать', 'Павлодар', 'Аксу', 'Экибастуз', 'другой', ],
		# жамбылская
		[ 'выбрать', 'Тараз', 'другой', ],
		# актюбинская
		[ 'выбрать', 'Актобе', 'другой', ],
		# западно-казахстанская
		[ 'выбрать', 'Уральск', 'другой', ],
		# кызылординская
		[ 'выбрать', 'Кызылорда', 'другой', ],
		# атырауская
		[ 'выбрать', 'Атырау', 'другой', ],
		# мангистауская
		[ 'выбрать', 'Актау', 'Жанаозен', 'другой', ],
	] # cityItems
	transportItems = [ 'выбрать', 'легковые', 'автобусы, до 16 пассаж. мест включит.', 'автобусы, свыше 16 пассаж. мест', 'грузовые', 'троллейбусы, трамваи', 'мототранспорт', 'прицепы, полуприцепы',  ]
	transportAgeItems = [ 'выбрать', 'до семи лет включительно', 'свыше семи лет', ]
	faceItems = [ 'выбрать', 'физическое', 'юридическое', ]
	ageItems = [ 'выбрать', 'меньше 25 лет', 'больше 25 лет', ]
	bmItems = [ 'выбрать', 'класс М', 'класс 0', 'класс 1', 'класс 2', 'класс 3', 'класс 4', 'класс 5', 'класс 6', 'класс 7', 'класс 8', 'класс 9', 'класс 10', 'класс 11', 'класс 12', 'класс 13', ]
	stageItems = [ 'выбрать', 'менее двух лет', 'два и более года', ]
	benefitItems = [ 'выбрать', 'присутствуют', 'отсутствуют', ]
	
	def _prepareConsts(self):
		self.cityCoefs = {
			# алматинская
			self.trUtf8('Талдыкорган'): 1.78, self.trUtf8('Капчагай'): 1.78, self.trUtf8('Текели'): 1.78, self.trUtf8('Алматы'): 2.96, self.trUtf8('алматинская-другой'): 1.424,
			# южно-казахстанская
			self.trUtf8('Шымкент'): 1.01, self.trUtf8('Арысь'): 1.01, self.trUtf8('Кентау'): 1.01, self.trUtf8('Туркестан'): 1.01, self.trUtf8('южно-казахстанская-другой'): 0.808,
			# восточно-казахстанская
			self.trUtf8('Усть-Каменогорск'): 1.96, self.trUtf8('Аягоз'): 1.96, self.trUtf8('Зыряновск'): 1.96, self.trUtf8('Курчатов'): 1.96, self.trUtf8('Риддер'): 1.96, self.trUtf8('Семей'): 1.96, self.trUtf8('восточно-казахстанская-другой'): 1.568,
			# костанайская
			self.trUtf8('Костанай'): 1.95, self.trUtf8('Аркалык'): 1.95, self.trUtf8('Лисаковск'): 1.95, self.trUtf8('Рудный'): 1.95, self.trUtf8('костанайская-другой'): 1.56,
			# карагандинская
			self.trUtf8('Караганда'): 1.39, self.trUtf8('Балхаш'): 1.39, self.trUtf8('Жезказган'): 1.39, self.trUtf8('Каражал'): 1.39, self.trUtf8('Приозёрск'): 1.39, self.trUtf8('Сарань'): 1.39, self.trUtf8('Сатпаев'): 1.39, self.trUtf8('Темиртау'): 1.39, self.trUtf8('карагандинская-другой'): 1.112,
			# северо-казахстанская
			self.trUtf8('Петропавловск'): 1.33, self.trUtf8('северо-казахстанская-другой'): 1.064,
			# акмолинская
			self.trUtf8('Кокшетау'): 1.32, self.trUtf8('Степногорск'): 1.32, self.trUtf8('Астана'): 2.2, self.trUtf8('акмолинская-другой'): 1.056,
			# павлодарская
			self.trUtf8('Павлодар'): 1.63, self.trUtf8('Аксу'): 1.63, self.trUtf8('Экибастуз'): 1.63, self.trUtf8('павлодарская-другой'): 1.304,
			# жамбылская
			self.trUtf8('Тараз'): 1.0, self.trUtf8('жамбылская-другой'): 0.8,
			# актюбинская
			self.trUtf8('Актобе'): 1.34, self.trUtf8('актюбинская-другой'): 1.08,
			# западно-казахстанская
			self.trUtf8('Уральск'): 1.17, self.trUtf8('западно-казахстанская-другой'): 0.963,
			# кызылординская
			self.trUtf8('Кызылорда'): 1.09, self.trUtf8('кызылординская-другой'): 0.872,
			# атырауская
			self.trUtf8('Атырау'): 2.69, self.trUtf8('атырауская-другой'): 2.152,
			# мангистауская
			self.trUtf8('Актау'): 1.15, self.trUtf8('Жанаозен'): 1.15, self.trUtf8('мангистауская-другой'): 0.92,
		} # self.cityCoefs
		
		self.transportCoefs = {
			self.trUtf8('легковые'): 2.09, self.trUtf8('автобусы, до 16 пассаж. мест включит.'): 3.26, self.trUtf8('автобусы, свыше 16 пассаж. мест'): 3.45, self.trUtf8('грузовые'): 3.98, self.trUtf8('троллейбусы, трамваи'): 2.33, self.trUtf8('мототранспорт'): 1.0, self.trUtf8('прицепы, полуприцепы'): 1.0,
		} # self.transportCoefs
		
		self.ageCoefs = {
			self.trUtf8('меньше 25 лет'): 0.05, self.trUtf8('больше 25 лет'): 0.0,
		} # self.ageCoefs
		
		self.transportAgeCoefs = {
			self.trUtf8('до семи лет включительно'): 1.0, self.trUtf8('свыше семи лет'): 1.1,
		} # self.transportAgeCoefs
		
		self.benefitsCoefs = {
			self.trUtf8('присутствуют'): 0.5, self.trUtf8('отсутствуют'): 1.0,
		} # self.benefitsCoefs
		
		self.stageCoefs = {
			self.trUtf8('менее двух лет'): 0.05, self.trUtf8('два и более года'): 0.0,
		} # self.stageCoefs
		
		self.bmCoefs = {
			self.trUtf8('класс М'): 2.45, self.trUtf8('класс 0'): 2.3, self.trUtf8('класс 1'): 1.55, self.trUtf8('класс 2'): 1.4, self.trUtf8('класс 3'): 1.0, self.trUtf8('класс 4'): 0.95, self.trUtf8('класс 5'): 0.9, self.trUtf8('класс 6'): 0.85, self.trUtf8('класс 7'): 0.8, self.trUtf8('класс 8'): 0.75, self.trUtf8('класс 9'): 0.7, self.trUtf8('класс 10'): 0.65, self.trUtf8('класс 11'): 0.6, self.trUtf8('класс 12'): 0.55, self.trUtf8('класс 13'): 0.5,
		} # self.bmCoefs

	def __init__(self):
		super(MainWindow, self).__init__()
		
		self._prepareConsts()
		self._prepareAppearance()
		
		self._prepareActions()
		self._prepareMenuBar()
		self._prepareStatusBar()
		self._prepareToolBar()
		
		self._prepareLayouts()
		self._prepareWidgets()
		
		self._prepareTray()
		
	def __del__(self):
		# don't need icon after killing window
		self.trayIcon.hide()
		
	def _prepareAppearance(self):
		# set window icon
		self.setWindowIcon(QtGui.QIcon('../icons/trayicon.png'))
		
		# set window title
		self.setWindowTitle(self.trUtf8('pyogpo — калькулятор ОГПО 2009'))
		
		# set window size
		#self.setMaximumSize(800, 600)
		self.resize(320, 240)
		
		# center window
		screen = QtGui.QDesktopWidget().screenGeometry()
		size = self.geometry()
		self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)
		
	def _prepareActions(self):
		# save action
		self.actionSave = QtGui.QAction(QtGui.QIcon('../icons/document-save.png'), self.trUtf8('Сохранить'), self)
		self.actionSave.setStatusTip(self.trUtf8('Сохранить вычисленные данные в файл'))
		self.actionSave.triggered.connect(self._actionSave_triggered)
		
		# exit action
		self.actionExit = QtGui.QAction(QtGui.QIcon('../icons/system-log-out.png'), self.trUtf8('Выход'), self)
		self.actionExit.setStatusTip(self.trUtf8('Выйти из программы'))
		self.actionExit.triggered.connect(QtGui.qApp.quit)
		
		# calculate action
		self.actionCalculate = QtGui.QAction(QtGui.QIcon('../icons/applications-system.png'), self.trUtf8('Вычислить форму'), self)
		self.actionCalculate.setStatusTip(self.trUtf8('Вычислить конечную сумму страховой премии'))
		self.actionCalculate.triggered.connect(self._actionCalculate_triggered)
		
		# clear form action
		self.actionClearForm = QtGui.QAction(QtGui.QIcon('../icons/edit-clear.png'), self.trUtf8('Очистить форму'), self)
		self.actionClearForm.setStatusTip(self.trUtf8('Очистить заполненную форму'))
		self.actionClearForm.triggered.connect(self._actionClearForm_triggered)
		
		# about action
		self.actionAbout = QtGui.QAction(QtGui.QIcon('../icons/contact-new.png'), self.trUtf8('О программе'), self)
		self.actionAbout.setStatusTip(self.trUtf8('Просмотреть информацию об авторах'))
		self.actionAbout.triggered.connect(self._actionAbout_triggered)
		
		# license action
		self.actionLicense = QtGui.QAction(QtGui.QIcon('../icons/media-optical.png'), self.trUtf8('Лицензия'), self)
		self.actionLicense.setStatusTip(self.trUtf8('Просмотреть информацию о лицензии данной программы'))
		self.actionLicense.triggered.connect(self._actionLicense_triggered)
		
	def _prepareMenuBar(self):
		# menu -> file
		self.menuFile = self.menuBar().addMenu(self.trUtf8('Файл'))
		#self.menuFile.addAction(self.actionSave)
		self.menuFile.addAction(self.actionExit)
		
		# menu -> actions
		self.menuActions = self.menuBar().addMenu(self.trUtf8('Действия'))
		self.menuActions.addAction(self.actionCalculate)
		self.menuActions.addAction(self.actionClearForm)
		
		# menu -> help
		self.menuHelp = self.menuBar().addMenu(self.trUtf8('Помощь'))
		self.menuHelp.addAction(self.actionAbout)
		self.menuHelp.addAction(self.actionLicense)
		
	def _prepareStatusBar(self):
		self.statusBar().showMessage(self.trUtf8('Готово'))
		
	def _prepareToolBar(self):
		# tool -> file
		self.toolFile = self.addToolBar(self.trUtf8('Файл'))
		#self.toolFile.addAction(self.actionSave)
		self.toolFile.addAction(self.actionExit)
		
		# tool -> actions
		self.toolActions = self.addToolBar(self.trUtf8('Действия'))
		self.toolActions.addAction(self.actionCalculate)
		self.toolActions.addAction(self.actionClearForm)
		
		# tool -> help
		self.toolHelp = self.addToolBar(self.trUtf8('Помощь'))
		self.toolHelp.addAction(self.actionAbout)
		self.toolHelp.addAction(self.actionLicense)
		
	def _prepareLayouts(self):
		# central widget
		self.widgetCentral = QtGui.QWidget()
		self.setCentralWidget(self.widgetCentral)
		
		# set layout
		self.layoutMain = QtGui.QGridLayout()
		self.widgetCentral.setLayout(self.layoutMain)
		
		# change main layout properties
		self.layoutMain.setRowStretch(0, 0)
		self.layoutMain.setRowStretch(1, 0)
		self.layoutMain.setRowStretch(2, 0)
		self.layoutMain.setRowStretch(3, 10)
		
		self.layoutMain.setColumnStretch(0, 10)
		self.layoutMain.setColumnStretch(1, 0)
		self.layoutMain.setColumnStretch(2, 0)
		self.layoutMain.setColumnStretch(3, 10)
		
		# data group box
		self.groupData = QtGui.QGroupBox()
		self.layoutMain.addWidget(self.groupData, 3, 0, 1, 4)
		self.groupData.setTitle(self.trUtf8('Данные и параметры страхования'))
		
		# data layout
		self.layoutData = QtGui.QGridLayout()
		self.groupData.setLayout(self.layoutData)
		
		self.layoutData.setColumnStretch(0, 0)
		self.layoutData.setColumnStretch(1, 0)
		self.layoutData.setColumnStretch(2, 10)
		self.layoutData.setColumnStretch(3, 0)
		self.layoutData.setColumnStretch(4, 0)
		self.layoutData.setColumnStretch(5, 0)
		self.layoutData.setColumnStretch(6, 10)
		
	def _prepareWidgets(self):
		# load big icon pixmap
		self.pixmapIcon = QtGui.QPixmap()
		self.pixmapIcon.load('../images/logo-big.png');
		# big icon label
		self.labelIcon = QtGui.QLabel(self.trUtf8(''))
		self.layoutMain.addWidget(self.labelIcon, 0, 0, 1, 4)
		self.labelIcon.setPixmap(self.pixmapIcon)
		self.labelIcon.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignCenter))
		
		# homepage label
		self.labelHomepage = QtGui.QLabel(self.trUtf8('<b>Страница проекта:</b> <u>http://webpolis.kz/</u>'))
		self.layoutMain.addWidget(self.labelHomepage, 1, 0, 1, 4)
		self.labelHomepage.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignCenter))
		
		# title label
		self.labelTitle = QtGui.QLabel(self.trUtf8('<h2>Калькулятор ОГПО на 2009 год второго полугодия</h2>'))
		self.layoutMain.addWidget(self.labelTitle, 2, 0, 1, 4)
		self.labelTitle.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignCenter))
		
		# premium label
		self.labelPremium = QtGui.QLabel(self.trUtf8('<h2>Страховая премия:</h2>'))
		self.layoutMain.addWidget(self.labelPremium, 4, 1, 1, 1)
		self.labelPremium.setAlignment(QtCore.Qt.Alignment(QtCore.Qt.AlignLeft))
		# premium edit
		self.editPremium = QtGui.QLineEdit(self.trUtf8(''))
		self.layoutMain.addWidget(self.editPremium, 4, 2, 1, 1)
		self.editPremium.setReadOnly(True)
		
		# premium calc button
		self.buttonPremium = QtGui.QPushButton(self.trUtf8('Рассчитать уровнень страховой премии'))
		self.layoutMain.addWidget(self.buttonPremium, 5, 1, 1, 2)
		self.buttonPremium.clicked.connect(self._buttonPremuim_clicked)
		
		# ---------- FIRST ROW
		# region label
		self.labelRegion = QtGui.QLabel(self.trUtf8('Область'))
		self.layoutData.addWidget(self.labelRegion, 0, 0, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 0, 1, 1, 1)
		# region combo box
		self.comboRegion = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboRegion, 0, 2, 1, 1)
		self.comboRegion.addItems(self.regionItems)
		self.comboRegion.currentIndexChanged.connect(self._comboRegion_currentIndexChanged)
		
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(40, 0), 0, 3, 1, 1)
		
		# city label
		self.labelCity = QtGui.QLabel(self.trUtf8('Город'))
		self.layoutData.addWidget(self.labelCity, 0, 4, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 0, 5, 1, 1)
		# city combo box
		self.comboCity = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboCity, 0, 6, 1, 1)
		self.comboCity.addItems([ 'выберите область' ])
		
		# ---------- SECOND ROW
		# transport label
		self.labelTransport = QtGui.QLabel(self.trUtf8('Тип транспортного средства (ТС)'))
		self.layoutData.addWidget(self.labelTransport, 1, 0, 1, 3)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 1, 3, 1, 1)
		# transport combo box
		self.comboTransport = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboTransport, 1, 4, 1, 3)
		self.comboTransport.addItems(self.transportItems)
		
		# ---------- THIRD ROW
		# transport age label
		self.labelTransportAge = QtGui.QLabel(self.trUtf8('Возраст ТС'))
		self.layoutData.addWidget(self.labelTransportAge, 2, 0, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 2, 1, 1, 1)
		# transport age combo box
		self.comboTransportAge = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboTransportAge, 2, 2, 1, 1)
		self.comboTransportAge.addItems(MainWindow.transportAgeItems)
		
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(40, 0), 2, 3, 1, 1)
		
		# face label
		self.labelFace = QtGui.QLabel(self.trUtf8('Тип лица'))
		self.layoutData.addWidget(self.labelFace, 2, 4, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 2, 5, 1, 1)
		# face combo box
		self.comboFace = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboFace, 2, 6, 1, 1)
		self.comboFace.addItems(MainWindow.faceItems)
		self.comboFace.currentIndexChanged.connect(self._comboFace_currentIndexChanged)
		
		# ---------- FOURTH ROW
		# age label
		self.labelAge = QtGui.QLabel(self.trUtf8('Возраст'))
		self.layoutData.addWidget(self.labelAge, 3, 0, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 3, 1, 1, 1)
		# age combo box
		self.comboAge = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboAge, 3, 2, 1, 1)
		self.comboAge.addItems(MainWindow.ageItems)
		
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(40, 0), 3, 3, 1, 1)
		
		# BM label
		self.labelBM = QtGui.QLabel(self.trUtf8('БМ'))
		self.layoutData.addWidget(self.labelBM, 3, 4, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 3, 5, 1, 1)
		# BM combo box
		self.comboBM = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboBM, 3, 6, 1, 1)
		self.comboBM.addItems(MainWindow.bmItems)
		
		# ---------- FIFTH ROW
		# stage label
		self.labelStage = QtGui.QLabel(self.trUtf8('Стаж'))
		self.layoutData.addWidget(self.labelStage, 4, 0, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 4, 1, 1, 1)
		# stage combo box
		self.comboStage = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboStage, 4, 2, 1, 1)
		self.comboStage.addItems(MainWindow.stageItems)
		
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(40, 0), 4, 3, 1, 1)
		
		# benefits label
		self.labelBenefits = QtGui.QLabel(self.trUtf8('Льготы'))
		self.layoutData.addWidget(self.labelBenefits, 4, 4, 1, 1)
		# add spacer
		self.layoutData.addItem(QtGui.QSpacerItem(20, 0), 4, 5, 1, 1)
		# benefits combo box
		self.comboBenefits = QtGui.QComboBox()
		self.layoutData.addWidget(self.comboBenefits, 4, 6, 1, 1)
		self.comboBenefits.addItems(MainWindow.benefitItems)
		
	def _prepareTray(self):
		# tray icon menu
		self.trayIconMenu = QtGui.QMenu(self)
		self.trayIconMenu.addAction(self.actionCalculate)
		self.trayIconMenu.addAction(self.actionClearForm)
		self.trayIconMenu.addSeparator()
		self.trayIconMenu.addAction(self.actionAbout)
		self.trayIconMenu.addAction(self.actionLicense)
		self.trayIconMenu.addSeparator()
		#self.trayIconMenu.addAction(self.actionSave)
		self.trayIconMenu.addAction(self.actionExit)
		
		# tray icon
		self.trayIcon = QtGui.QSystemTrayIcon(self)
		self.trayIcon.setContextMenu(self.trayIconMenu)
		self.trayIcon.setToolTip(self.trUtf8('Калькулятор ОГПО 2009'))
		# set icon
		self.trayIcon.setIcon(QtGui.QIcon('../icons/trayicon.png'))
		# show it now
		self.trayIcon.show()
		
		# tray icon events
		self.trayIcon.activated.connect(self._trayIcon_activated)
		
	def _doCalculations(self, region, city, transport, transportAge, face, age, bm, stage, benefits):
		# prepare coefs
		# region & city
		cityCoef = 0.0
		if city != 'другой':
			cityCoef = self.cityCoefs[city]
		else:
			cityCoef = self.cityCoefs[region + '-другой']
		
		# transport coef
		transportCoef = self.transportCoefs[transport]
		
		# transport age coef
		transportAgeCoef = self.transportAgeCoefs[transportAge]
		
		# age coef
		ageCoef = self.ageCoefs[age]
		
		# bm coef
		bmCoef = self.bmCoefs[bm]
		
		# stage coef
		stageCoef = self.stageCoefs[stage]
		
		# benefits coef
		benefitsCoef = self.benefitsCoefs[benefits]
		
		# face type coef
		if face == 'юридическое':
			ageCoef = stageCoef = 0.0
			benefitsCoef = 1.2
			
		# calculate now
		x = self.MRP * 1.9
		y = bmCoef * cityCoef * transportCoef * benefitsCoef * transportAgeCoef
		z = 1.0 + stageCoef + ageCoef
		return x * y * z
	
	def _actionAbout_triggered(self):
		self.aboutWindow = AboutWindow()
		self.aboutWindow.show()
		
	def _buttonPremuim_clicked(self):
		# combo boxes text tuple
		self._comboBoxesText = (self.comboRegion.currentText(), self.comboCity.currentText(), self.comboTransport.currentText(), self.comboTransportAge.currentText(), self.comboFace.currentText(), self.comboAge.currentText(), self.comboBM.currentText(), self.comboStage.currentText(), self.comboBenefits.currentText())
		
		# validate data
		if 'выбрать' in self._comboBoxesText:
			# customize message box
			msgBox = QtGui.QMessageBox()
			msgBox.setText(self.trUtf8('Вы не заполнили все поля нужным образом!'))
			msgBox.setWindowTitle(self.trUtf8('Ошибка проверки данных'))
			msgBox.setIconPixmap(QtGui.QPixmap('../icons/emblem-important.png'))
			msgBox.exec_()
			return
		
		# do calcs now
		result = self._doCalculations(*self._comboBoxesText)
		self.editPremium.setText(str(int(math.ceil(result))))
		
	def _comboRegion_currentIndexChanged(self, index):
		self.comboCity.clear()
		self.comboCity.addItems(self.cityItems[index])
		
	def _comboFace_currentIndexChanged(self, index):
		# disable stage, age and benefits combos for non physical faces
		self.comboBenefits.clear()
		self.comboStage.clear()
		self.comboAge.clear()
		if index == 2:
			self.comboBenefits.addItems([ 'недоступно' ])
			self.comboStage.addItems([ 'недоступно' ])
			self.comboAge.addItems([ 'недоступно' ])
		else:
			self.comboBenefits.addItems(MainWindow.benefitItems)
			self.comboStage.addItems(MainWindow.stageItems)
			self.comboAge.addItems(MainWindow.ageItems)
			
	def _trayIcon_activated(self, reason):
		if reason == QtGui.QSystemTrayIcon.Trigger:
			if self.isVisible():
				self.setVisible(False)
			else:
				self.setVisible(True)
				
	def _actionLicense_triggered(self):
		self.licenseWindow = LicenseWindow()
		self.licenseWindow.show()
		
	def _actionCalculate_triggered(self):
		# just call calculate button slot
		self._buttonPremuim_clicked()
		
	def _actionClearForm_triggered(self):
		self.comboRegion.clear()
		self.comboRegion.addItems(self.regionItems)
		self.comboCity.clear()
		self.comboCity.addItems([ 'выберите область' ])
		self.comboTransport.clear()
		self.comboTransport.addItems(self.transportItems)
		self.comboTransportAge.clear()
		self.comboTransportAge.addItems(self.transportAgeItems)
		self.comboFace.clear()
		self.comboFace.addItems(self.faceItems)
		self.comboAge.clear()
		self.comboAge.addItems(self.ageItems)
		self.comboBM.clear()
		self.comboBM.addItems(self.bmItems)
		self.comboStage.clear()
		self.comboStage.addItems(self.stageItems)
		self.comboBenefits.clear()
		self.comboBenefits.addItems(self.benefitItems)
		
		self.editPremium.setText('')
		
	def _actionSave_triggered(self):
		pass
		
if __name__ == '__main__':
	pass